#include <iostream>
#include <vector>
#include <future>
#include <memory>

// 简单的事件类
class Event {
public:
    virtual void handle() = 0;
    virtual ~Event() {}
};

// 具体事件实现
class ConcreteEvent : public Event {
public:
    void handle() override {
        std::cout << "Concrete Event handled." << std::endl;
    }
};

// 观察者接口
class Observer {
public:
    void update(Event* event) {
        // 使用std::async 来异步处理事件
        auto future = std::async(std::launch::async, &Observer::handleEvent, this, event);
        future.wait();  // 可以选择等待异步操作完成，或者存储future对象进行后续处理
    }

    void handleEvent(Event* event) {
        if (event) {
            event->handle();
        }
    }
};

// 主题，负责管理观察者并在状态改变时通知它们
class Subject {
private:
    std::vector<Observer*> observers;

public:
    void attach(Observer* observer) {
        observers.push_back(observer);
    }

    void notify(Event* event) {
        for (Observer* obs : observers) {
            obs->update(event);
        }
    }
};

int main() {
    Subject subject;
    Observer observer1, observer2;

    // 将观察者附加到主题
    subject.attach(&observer1);
    subject.attach(&observer2);

    // 创建一个具体的事件
    ConcreteEvent event;

    // 通知所有观察者
    subject.notify(&event);

    return 0;
}